﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Xlsx.ComponentModel;
using System.Drawing;
using Xlsx.DataBinder;
using System.IO;
using System.Xml.Serialization;
using System.Collections.Generic;
using Xlsx.ComponentModel.Enums;
using Xlsx.DataBinder.Collections;
using System.Linq;

namespace Xslx.DataBinder.Tests.DataBinder
{
    [TestClass]
    public class XlsxSkinManagerTest
    {
        [TestInitialize()]
        public void Clean()
        {
            if (File.Exists("test.xml"))
                File.Delete("test.xml");
        }

        [TestMethod]
        public void TestHeaderWithoutLoad()
        {
            var expected = new XlsxSkin() 
            {
                BorderColor = Color.Transparent,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.Transparent,
                FontColor = Color.Black,
                FontSize = 10,
                HasBorder = false,
                IsBold = false,
                IsItalic = false,
                IsUnderline = false
            };

            var actual = XlsxSkinManager.XlsxHeader;

            Assert.AreEqual(expected.BorderColor.A, actual.BorderColor.A);
            Assert.AreEqual(expected.BorderColor.R, actual.BorderColor.R);
            Assert.AreEqual(expected.BorderColor.G, actual.BorderColor.G);
            Assert.AreEqual(expected.BorderColor.B, actual.BorderColor.B);
            Assert.AreEqual(expected.BorderStyle, actual.BorderStyle);
            Assert.AreEqual(expected.FillColor.A, actual.FillColor.A);
            Assert.AreEqual(expected.FillColor.R, actual.FillColor.R);
            Assert.AreEqual(expected.FillColor.G, actual.FillColor.G);
            Assert.AreEqual(expected.FillColor.B, actual.FillColor.B);
            Assert.AreEqual(expected.FontColor.A, actual.FontColor.A);
            Assert.AreEqual(expected.FontColor.R, actual.FontColor.R);
            Assert.AreEqual(expected.FontColor.G, actual.FontColor.G);
            Assert.AreEqual(expected.FontColor.B, actual.FontColor.B);
            Assert.AreEqual(expected.FontSize, actual.FontSize);
            Assert.AreEqual(expected.HasBorder, actual.HasBorder);
            Assert.AreEqual(expected.IsBold, actual.IsBold);
            Assert.AreEqual(expected.IsItalic, actual.IsItalic);
            Assert.AreEqual(expected.IsUnderline, actual.IsUnderline);
        }

        [TestMethod]
        public void TestRowWithoutLoad()
        {
            var expected = new XlsxSkin()
            {
                BorderColor = Color.Transparent,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.Transparent,
                FontColor = Color.Black,
                FontSize = 10,
                HasBorder = false,
                IsBold = false,
                IsItalic = false,
                IsUnderline = false
            };

            var actual = XlsxSkinManager.XlsxRow;

            Assert.AreEqual(expected.BorderColor.A, actual.BorderColor.A);
            Assert.AreEqual(expected.BorderColor.R, actual.BorderColor.R);
            Assert.AreEqual(expected.BorderColor.G, actual.BorderColor.G);
            Assert.AreEqual(expected.BorderColor.B, actual.BorderColor.B);
            Assert.AreEqual(expected.BorderStyle, actual.BorderStyle);
            Assert.AreEqual(expected.FillColor.A, actual.FillColor.A);
            Assert.AreEqual(expected.FillColor.R, actual.FillColor.R);
            Assert.AreEqual(expected.FillColor.G, actual.FillColor.G);
            Assert.AreEqual(expected.FillColor.B, actual.FillColor.B);
            Assert.AreEqual(expected.FontColor.A, actual.FontColor.A);
            Assert.AreEqual(expected.FontColor.R, actual.FontColor.R);
            Assert.AreEqual(expected.FontColor.G, actual.FontColor.G);
            Assert.AreEqual(expected.FontColor.B, actual.FontColor.B);
            Assert.AreEqual(expected.FontSize, actual.FontSize);
            Assert.AreEqual(expected.HasBorder, actual.HasBorder);
            Assert.AreEqual(expected.IsBold, actual.IsBold);
            Assert.AreEqual(expected.IsItalic, actual.IsItalic);
            Assert.AreEqual(expected.IsUnderline, actual.IsUnderline);
        }

        [TestMethod]
        public void TestRowAlternateWithoutLoad()
        {
            var expected = new XlsxSkin()
            {
                BorderColor = Color.Transparent,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.Transparent,
                FontColor = Color.Black,
                FontSize = 10,
                HasBorder = false,
                IsBold = false,
                IsItalic = false,
                IsUnderline = false
            };

            var actual = XlsxSkinManager.XlsxAlternateRow;

            Assert.AreEqual(expected.BorderColor.A, actual.BorderColor.A);
            Assert.AreEqual(expected.BorderColor.R, actual.BorderColor.R);
            Assert.AreEqual(expected.BorderColor.G, actual.BorderColor.G);
            Assert.AreEqual(expected.BorderColor.B, actual.BorderColor.B);
            Assert.AreEqual(expected.BorderStyle, actual.BorderStyle);
            Assert.AreEqual(expected.FillColor.A, actual.FillColor.A);
            Assert.AreEqual(expected.FillColor.R, actual.FillColor.R);
            Assert.AreEqual(expected.FillColor.G, actual.FillColor.G);
            Assert.AreEqual(expected.FillColor.B, actual.FillColor.B);
            Assert.AreEqual(expected.FontColor.A, actual.FontColor.A);
            Assert.AreEqual(expected.FontColor.R, actual.FontColor.R);
            Assert.AreEqual(expected.FontColor.G, actual.FontColor.G);
            Assert.AreEqual(expected.FontColor.B, actual.FontColor.B);
            Assert.AreEqual(expected.FontSize, actual.FontSize);
            Assert.AreEqual(expected.HasBorder, actual.HasBorder);
            Assert.AreEqual(expected.IsBold, actual.IsBold);
            Assert.AreEqual(expected.IsItalic, actual.IsItalic);
            Assert.AreEqual(expected.IsUnderline, actual.IsUnderline);
        }

        [TestMethod]
        public void TestSkinLoad()
        {
            var expectedHeader = new XlsxSkin()
            {
                BorderColor = Color.AliceBlue,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.AntiqueWhite,
                FontColor = Color.Aqua,
                FontSize = 1,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = true
            };

            var expectedRow = new XlsxSkin()
            {
                BorderColor = Color.Aquamarine,
                BorderStyle = XlsxBorderStyle.Simple,
                FillColor = Color.Azure,
                FontColor = Color.Beige,
                FontSize = 3,
                HasBorder = false,
                IsBold = true,
                IsItalic = false,
                IsUnderline = true
            };

            var expectedRowAlternate = new XlsxSkin()
            {
                BorderColor = Color.Bisque,
                BorderStyle = XlsxBorderStyle.Medium,
                FillColor = Color.Black,
                FontColor = Color.BlanchedAlmond,
                FontSize = 5,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = false
            };

            XlsxSkinManager.Load(expectedHeader, expectedRow, expectedRowAlternate);

            var actualHeader = XlsxSkinManager.XlsxHeader;
            var actualRow = XlsxSkinManager.XlsxRow;
            var actualRowAlternate = XlsxSkinManager.XlsxAlternateRow;

            Assert.AreEqual(expectedHeader.BorderColor.A, actualHeader.BorderColor.A);
            Assert.AreEqual(expectedHeader.BorderColor.R, actualHeader.BorderColor.R);
            Assert.AreEqual(expectedHeader.BorderColor.G, actualHeader.BorderColor.G);
            Assert.AreEqual(expectedHeader.BorderColor.B, actualHeader.BorderColor.B);
            Assert.AreEqual(expectedHeader.BorderStyle, actualHeader.BorderStyle);
            Assert.AreEqual(expectedHeader.FillColor.A, actualHeader.FillColor.A);
            Assert.AreEqual(expectedHeader.FillColor.R, actualHeader.FillColor.R);
            Assert.AreEqual(expectedHeader.FillColor.G, actualHeader.FillColor.G);
            Assert.AreEqual(expectedHeader.FillColor.B, actualHeader.FillColor.B);
            Assert.AreEqual(expectedHeader.FontColor.A, actualHeader.FontColor.A);
            Assert.AreEqual(expectedHeader.FontColor.R, actualHeader.FontColor.R);
            Assert.AreEqual(expectedHeader.FontColor.G, actualHeader.FontColor.G);
            Assert.AreEqual(expectedHeader.FontColor.B, actualHeader.FontColor.B);
            Assert.AreEqual(expectedHeader.FontSize, actualHeader.FontSize);
            Assert.AreEqual(expectedHeader.HasBorder, actualHeader.HasBorder);
            Assert.AreEqual(expectedHeader.IsBold, actualHeader.IsBold);
            Assert.AreEqual(expectedHeader.IsItalic, actualHeader.IsItalic);
            Assert.AreEqual(expectedHeader.IsUnderline, actualHeader.IsUnderline);

            //Assert.AreEqual(expectedRow.BorderColor.A, actualRow.BorderColor.A);
            //Assert.AreEqual(expectedRow.BorderColor.R, actualRow.BorderColor.R);
            //Assert.AreEqual(expectedRow.BorderColor.G, actualRow.BorderColor.G);
            //Assert.AreEqual(expectedRow.BorderColor.B, actualRow.BorderColor.B);
            //Assert.AreEqual(expectedRow.BorderStyle, actualRow.BorderStyle);
            Assert.AreEqual(expectedRow.FillColor.A, actualRow.FillColor.A);
            Assert.AreEqual(expectedRow.FillColor.R, actualRow.FillColor.R);
            Assert.AreEqual(expectedRow.FillColor.G, actualRow.FillColor.G);
            Assert.AreEqual(expectedRow.FillColor.B, actualRow.FillColor.B);
            Assert.AreEqual(expectedRow.FontColor.A, actualRow.FontColor.A);
            Assert.AreEqual(expectedRow.FontColor.R, actualRow.FontColor.R);
            Assert.AreEqual(expectedRow.FontColor.G, actualRow.FontColor.G);
            Assert.AreEqual(expectedRow.FontColor.B, actualRow.FontColor.B);
            Assert.AreEqual(expectedRow.FontSize, actualRow.FontSize);
            Assert.AreEqual(expectedRow.HasBorder, actualRow.HasBorder);
            Assert.AreEqual(expectedRow.IsBold, actualRow.IsBold);
            Assert.AreEqual(expectedRow.IsItalic, actualRow.IsItalic);
            Assert.AreEqual(expectedRow.IsUnderline, actualRow.IsUnderline);

            Assert.AreEqual(expectedRowAlternate.BorderColor.A, actualRowAlternate.BorderColor.A);
            Assert.AreEqual(expectedRowAlternate.BorderColor.R, actualRowAlternate.BorderColor.R);
            Assert.AreEqual(expectedRowAlternate.BorderColor.G, actualRowAlternate.BorderColor.G);
            Assert.AreEqual(expectedRowAlternate.BorderColor.B, actualRowAlternate.BorderColor.B);
            Assert.AreEqual(expectedRowAlternate.BorderStyle, actualRowAlternate.BorderStyle);
            Assert.AreEqual(expectedRowAlternate.FillColor.A, actualRowAlternate.FillColor.A);
            Assert.AreEqual(expectedRowAlternate.FillColor.R, actualRowAlternate.FillColor.R);
            Assert.AreEqual(expectedRowAlternate.FillColor.G, actualRowAlternate.FillColor.G);
            Assert.AreEqual(expectedRowAlternate.FillColor.B, actualRowAlternate.FillColor.B);
            Assert.AreEqual(expectedRowAlternate.FontColor.A, actualRowAlternate.FontColor.A);
            Assert.AreEqual(expectedRowAlternate.FontColor.R, actualRowAlternate.FontColor.R);
            Assert.AreEqual(expectedRowAlternate.FontColor.G, actualRowAlternate.FontColor.G);
            Assert.AreEqual(expectedRowAlternate.FontColor.B, actualRowAlternate.FontColor.B);
            Assert.AreEqual(expectedRowAlternate.FontSize, actualRowAlternate.FontSize);
            Assert.AreEqual(expectedRowAlternate.HasBorder, actualRowAlternate.HasBorder);
            Assert.AreEqual(expectedRowAlternate.IsBold, actualRowAlternate.IsBold);
            Assert.AreEqual(expectedRowAlternate.IsItalic, actualRowAlternate.IsItalic);
            Assert.AreEqual(expectedRowAlternate.IsUnderline, actualRowAlternate.IsUnderline);
        }

        [TestMethod]
        public void TestFileLoad()
        {
            var expectedHeader = new XlsxSkin()
            {
                BorderColor = Color.AliceBlue,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.AntiqueWhite,
                FontColor = Color.Aqua,
                FontSize = 1,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = true
            };

            var expectedRow = new XlsxSkin()
            {
                BorderColor = Color.Aquamarine,
                BorderStyle = XlsxBorderStyle.Simple,
                FillColor = Color.Azure,
                FontColor = Color.Beige,
                FontSize = 3,
                HasBorder = false,
                IsBold = true,
                IsItalic = false,
                IsUnderline = true
            };

            var expectedRowAlternate = new XlsxSkin()
            {
                BorderColor = Color.Bisque,
                BorderStyle = XlsxBorderStyle.Medium,
                FillColor = Color.Black,
                FontColor = Color.BlanchedAlmond,
                FontSize = 5,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = false
            };

            var skins = new List<XlsxSkinDataItem>();
            skins.Add(new XlsxSkinDataItem()
                {
                    Type = XlsxSkinType.Header, 
                    Value = expectedHeader
                });
            skins.Add(new XlsxSkinDataItem()
                {
                    Type = XlsxSkinType.Row, 
                    Value = expectedRow
                });
            skins.Add(new XlsxSkinDataItem()
                {
                    Type = XlsxSkinType.AlternateRow, 
                    Value = expectedRowAlternate
                });

            TextWriter writer = null;

            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<XlsxSkinDataItem>));
                writer = new StreamWriter("test.xml");
                serializer.Serialize(writer, skins);
            }
            finally
            {
                if (writer != null)
                    writer.Close();
            }

            XlsxSkinManager.Load("test.xml");

            var actualHeader = XlsxSkinManager.XlsxHeader;
            var actualRow = XlsxSkinManager.XlsxRow;
            var actualRowAlternate = XlsxSkinManager.XlsxAlternateRow;

            Assert.AreEqual(expectedHeader.BorderColor.A, actualHeader.BorderColor.A);
            Assert.AreEqual(expectedHeader.BorderColor.R, actualHeader.BorderColor.R);
            Assert.AreEqual(expectedHeader.BorderColor.G, actualHeader.BorderColor.G);
            Assert.AreEqual(expectedHeader.BorderColor.B, actualHeader.BorderColor.B);
            Assert.AreEqual(expectedHeader.BorderStyle, actualHeader.BorderStyle);
            Assert.AreEqual(expectedHeader.FillColor.A, actualHeader.FillColor.A);
            Assert.AreEqual(expectedHeader.FillColor.R, actualHeader.FillColor.R);
            Assert.AreEqual(expectedHeader.FillColor.G, actualHeader.FillColor.G);
            Assert.AreEqual(expectedHeader.FillColor.B, actualHeader.FillColor.B);
            Assert.AreEqual(expectedHeader.FontColor.A, actualHeader.FontColor.A);
            Assert.AreEqual(expectedHeader.FontColor.R, actualHeader.FontColor.R);
            Assert.AreEqual(expectedHeader.FontColor.G, actualHeader.FontColor.G);
            Assert.AreEqual(expectedHeader.FontColor.B, actualHeader.FontColor.B);
            Assert.AreEqual(expectedHeader.FontSize, actualHeader.FontSize);
            Assert.AreEqual(expectedHeader.HasBorder, actualHeader.HasBorder);
            Assert.AreEqual(expectedHeader.IsBold, actualHeader.IsBold);
            Assert.AreEqual(expectedHeader.IsItalic, actualHeader.IsItalic);
            Assert.AreEqual(expectedHeader.IsUnderline, actualHeader.IsUnderline);

            //Assert.AreEqual(expectedRow.BorderColor.A, actualRow.BorderColor.A);
            //Assert.AreEqual(expectedRow.BorderColor.R, actualRow.BorderColor.R);
            //Assert.AreEqual(expectedRow.BorderColor.G, actualRow.BorderColor.G);
            //Assert.AreEqual(expectedRow.BorderColor.B, actualRow.BorderColor.B);
            //Assert.AreEqual(expectedRow.BorderStyle, actualRow.BorderStyle);
            Assert.AreEqual(expectedRow.FillColor.A, actualRow.FillColor.A);
            Assert.AreEqual(expectedRow.FillColor.R, actualRow.FillColor.R);
            Assert.AreEqual(expectedRow.FillColor.G, actualRow.FillColor.G);
            Assert.AreEqual(expectedRow.FillColor.B, actualRow.FillColor.B);
            Assert.AreEqual(expectedRow.FontColor.A, actualRow.FontColor.A);
            Assert.AreEqual(expectedRow.FontColor.R, actualRow.FontColor.R);
            Assert.AreEqual(expectedRow.FontColor.G, actualRow.FontColor.G);
            Assert.AreEqual(expectedRow.FontColor.B, actualRow.FontColor.B);
            Assert.AreEqual(expectedRow.FontSize, actualRow.FontSize);
            Assert.AreEqual(expectedRow.HasBorder, actualRow.HasBorder);
            Assert.AreEqual(expectedRow.IsBold, actualRow.IsBold);
            Assert.AreEqual(expectedRow.IsItalic, actualRow.IsItalic);
            Assert.AreEqual(expectedRow.IsUnderline, actualRow.IsUnderline);

            Assert.AreEqual(expectedRowAlternate.BorderColor.A, actualRowAlternate.BorderColor.A);
            Assert.AreEqual(expectedRowAlternate.BorderColor.R, actualRowAlternate.BorderColor.R);
            Assert.AreEqual(expectedRowAlternate.BorderColor.G, actualRowAlternate.BorderColor.G);
            Assert.AreEqual(expectedRowAlternate.BorderColor.B, actualRowAlternate.BorderColor.B);
            Assert.AreEqual(expectedRowAlternate.BorderStyle, actualRowAlternate.BorderStyle);
            Assert.AreEqual(expectedRowAlternate.FillColor.A, actualRowAlternate.FillColor.A);
            Assert.AreEqual(expectedRowAlternate.FillColor.R, actualRowAlternate.FillColor.R);
            Assert.AreEqual(expectedRowAlternate.FillColor.G, actualRowAlternate.FillColor.G);
            Assert.AreEqual(expectedRowAlternate.FillColor.B, actualRowAlternate.FillColor.B);
            Assert.AreEqual(expectedRowAlternate.FontColor.A, actualRowAlternate.FontColor.A);
            Assert.AreEqual(expectedRowAlternate.FontColor.R, actualRowAlternate.FontColor.R);
            Assert.AreEqual(expectedRowAlternate.FontColor.G, actualRowAlternate.FontColor.G);
            Assert.AreEqual(expectedRowAlternate.FontColor.B, actualRowAlternate.FontColor.B);
            Assert.AreEqual(expectedRowAlternate.FontSize, actualRowAlternate.FontSize);
            Assert.AreEqual(expectedRowAlternate.HasBorder, actualRowAlternate.HasBorder);
            Assert.AreEqual(expectedRowAlternate.IsBold, actualRowAlternate.IsBold);
            Assert.AreEqual(expectedRowAlternate.IsItalic, actualRowAlternate.IsItalic);
            Assert.AreEqual(expectedRowAlternate.IsUnderline, actualRowAlternate.IsUnderline);

            File.Delete("test.xml");
        }

        [TestMethod]
        public void TestSave()
        {
            var expectedHeader = new XlsxSkin()
            {
                BorderColor = Color.AliceBlue,
                BorderStyle = XlsxBorderStyle.None,
                FillColor = Color.AntiqueWhite,
                FontColor = Color.Aqua,
                FontSize = 1,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = true
            };

            var expectedRow = new XlsxSkin()
            {
                BorderColor = Color.Aquamarine,
                BorderStyle = XlsxBorderStyle.Simple,
                FillColor = Color.Azure,
                FontColor = Color.Beige,
                FontSize = 3,
                HasBorder = false,
                IsBold = true,
                IsItalic = false,
                IsUnderline = true
            };

            var expectedRowAlternate = new XlsxSkin()
            {
                BorderColor = Color.Bisque,
                BorderStyle = XlsxBorderStyle.Medium,
                FillColor = Color.Black,
                FontColor = Color.BlanchedAlmond,
                FontSize = 5,
                HasBorder = false,
                IsBold = true,
                IsItalic = true,
                IsUnderline = false
            };

            XlsxSkinManager.Load(expectedHeader, expectedRow, expectedRowAlternate);
            XlsxSkinManager.Save("", "test");

            Assert.IsTrue(File.Exists("test.xml"));

            TextReader reader = null;

            List<XlsxSkinDataItem> skins;

            try
            {
                var serializer = new XmlSerializer(typeof(List<XlsxSkinDataItem>));
                reader = new StreamReader("test.xml");
                skins = (List<XlsxSkinDataItem>)serializer.Deserialize(reader);
            }
            finally
            {
                if (reader != null)
                    reader.Close();
            }

            if (skins != null)
            {
                var skinItemHeader = skins.Where(x => x.Type == XlsxSkinType.Header).Single();
                var skinItemRow = skins.Where(x => x.Type == XlsxSkinType.Row).Single();
                var skinItemRowAlternate = skins.Where(x => x.Type == XlsxSkinType.AlternateRow).Single();

                Assert.IsNotNull(skinItemHeader);
                Assert.IsNotNull(skinItemRow);
                Assert.IsNotNull(skinItemRowAlternate);

                var actualHeader = skinItemHeader.Value;
                var actualRow = skinItemRow.Value;
                var actualRowAlternate = skinItemRowAlternate.Value;

                Assert.AreEqual(expectedHeader.BorderColor.A, actualHeader.BorderColor.A);
                Assert.AreEqual(expectedHeader.BorderColor.R, actualHeader.BorderColor.R);
                Assert.AreEqual(expectedHeader.BorderColor.G, actualHeader.BorderColor.G);
                Assert.AreEqual(expectedHeader.BorderColor.B, actualHeader.BorderColor.B);
                Assert.AreEqual(expectedHeader.BorderStyle, actualHeader.BorderStyle);
                Assert.AreEqual(expectedHeader.FillColor.A, actualHeader.FillColor.A);
                Assert.AreEqual(expectedHeader.FillColor.R, actualHeader.FillColor.R);
                Assert.AreEqual(expectedHeader.FillColor.G, actualHeader.FillColor.G);
                Assert.AreEqual(expectedHeader.FillColor.B, actualHeader.FillColor.B);
                Assert.AreEqual(expectedHeader.FontColor.A, actualHeader.FontColor.A);
                Assert.AreEqual(expectedHeader.FontColor.R, actualHeader.FontColor.R);
                Assert.AreEqual(expectedHeader.FontColor.G, actualHeader.FontColor.G);
                Assert.AreEqual(expectedHeader.FontColor.B, actualHeader.FontColor.B);
                Assert.AreEqual(expectedHeader.FontSize, actualHeader.FontSize);
                Assert.AreEqual(expectedHeader.HasBorder, actualHeader.HasBorder);
                Assert.AreEqual(expectedHeader.IsBold, actualHeader.IsBold);
                Assert.AreEqual(expectedHeader.IsItalic, actualHeader.IsItalic);
                Assert.AreEqual(expectedHeader.IsUnderline, actualHeader.IsUnderline);

                Assert.AreEqual(expectedRow.BorderColor.A, actualRow.BorderColor.A);
                Assert.AreEqual(expectedRow.BorderColor.R, actualRow.BorderColor.R);
                Assert.AreEqual(expectedRow.BorderColor.G, actualRow.BorderColor.G);
                Assert.AreEqual(expectedRow.BorderColor.B, actualRow.BorderColor.B);
                Assert.AreEqual(expectedRow.BorderStyle, actualRow.BorderStyle);
                Assert.AreEqual(expectedRow.FillColor.A, actualRow.FillColor.A);
                Assert.AreEqual(expectedRow.FillColor.R, actualRow.FillColor.R);
                Assert.AreEqual(expectedRow.FillColor.G, actualRow.FillColor.G);
                Assert.AreEqual(expectedRow.FillColor.B, actualRow.FillColor.B);
                Assert.AreEqual(expectedRow.FontColor.A, actualRow.FontColor.A);
                Assert.AreEqual(expectedRow.FontColor.R, actualRow.FontColor.R);
                Assert.AreEqual(expectedRow.FontColor.G, actualRow.FontColor.G);
                Assert.AreEqual(expectedRow.FontColor.B, actualRow.FontColor.B);
                Assert.AreEqual(expectedRow.FontSize, actualRow.FontSize);
                Assert.AreEqual(expectedRow.HasBorder, actualRow.HasBorder);
                Assert.AreEqual(expectedRow.IsBold, actualRow.IsBold);
                Assert.AreEqual(expectedRow.IsItalic, actualRow.IsItalic);
                Assert.AreEqual(expectedRow.IsUnderline, actualRow.IsUnderline);

                Assert.AreEqual(expectedRowAlternate.BorderColor.A, actualRowAlternate.BorderColor.A);
                Assert.AreEqual(expectedRowAlternate.BorderColor.R, actualRowAlternate.BorderColor.R);
                Assert.AreEqual(expectedRowAlternate.BorderColor.G, actualRowAlternate.BorderColor.G);
                Assert.AreEqual(expectedRowAlternate.BorderColor.B, actualRowAlternate.BorderColor.B);
                Assert.AreEqual(expectedRowAlternate.BorderStyle, actualRowAlternate.BorderStyle);
                Assert.AreEqual(expectedRowAlternate.FillColor.A, actualRowAlternate.FillColor.A);
                Assert.AreEqual(expectedRowAlternate.FillColor.R, actualRowAlternate.FillColor.R);
                Assert.AreEqual(expectedRowAlternate.FillColor.G, actualRowAlternate.FillColor.G);
                Assert.AreEqual(expectedRowAlternate.FillColor.B, actualRowAlternate.FillColor.B);
                Assert.AreEqual(expectedRowAlternate.FontColor.A, actualRowAlternate.FontColor.A);
                Assert.AreEqual(expectedRowAlternate.FontColor.R, actualRowAlternate.FontColor.R);
                Assert.AreEqual(expectedRowAlternate.FontColor.G, actualRowAlternate.FontColor.G);
                Assert.AreEqual(expectedRowAlternate.FontColor.B, actualRowAlternate.FontColor.B);
                Assert.AreEqual(expectedRowAlternate.FontSize, actualRowAlternate.FontSize);
                Assert.AreEqual(expectedRowAlternate.HasBorder, actualRowAlternate.HasBorder);
                Assert.AreEqual(expectedRowAlternate.IsBold, actualRowAlternate.IsBold);
                Assert.AreEqual(expectedRowAlternate.IsItalic, actualRowAlternate.IsItalic);
                Assert.AreEqual(expectedRowAlternate.IsUnderline, actualRowAlternate.IsUnderline);
            }
            else
            {
                Assert.Fail();
            }
        }
    }
}
